package cn.com.huzo.service.tech;

import cn.com.huzo.model.entities.tech.MrpHeaderEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * 物料需求计划管理服务对象接口。
 *
 * @author 吴旭
 */
public interface MrpHeaderManager extends GenericManager<MrpHeaderEntity, Long> {

    /**
     * 取得物料需求计划的主从表数据
     *
     * @param headerId 物料需求计划标识
     * @param currentUserId 当前用户
     * @param workFlowId 物料需求计划审核工作流标识
     * @return
     * @throws Exception
     */
    Map<String, Object> fetchByHeaderId(Long headerId, Long currentUserId, Long workFlowId) throws Exception;

    /**
     * 取得符合条件的调达表数据
     *
     * @param criterion 条件
     * @return
     * @throws java.lang.Exception
     */
    List<MrpHeaderEntity> fetchAll(Map<String, Object> criterion) throws Exception;

    /**
     * 审核物料需求计划
     *
     * @param headerId 物料需求计划标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @param isCheckCurrentNode 是否针对当前流程做审核
     * @return 审核后状态
     * @throws Exception
     */
    Map<String, Object> doCheck(Long headerId, Long workFlowId, Short nodeOrder, Long checkedBy, Short isCheckCurrentNode) throws Exception;

    /**
     * 反审审核物料需求计划
     *
     * @param headerId 物料需求计划标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @return 审核后状态
     * @throws Exception
     */
    Map<String, Object> doUnCheck(Long headerId, Long workFlowId, Short nodeOrder, Long checkedBy) throws Exception;

    /**
     * 取得打印预览数据
     *
     * @param criterion 条件
     * @return 打印预览数据
     * @throws Exception
     */
    Map<String, Object> fetchPrintPreviewData(Map<String, Object> criterion) throws Exception;

    /**
     * 设置采购完成标记
     *
     * @param headerId 物料需求计划标识
     * @param currentUserId 当前用户
     * @param workFlowId 审核流程标识
     * @param poOverFlag 完成标记
     * @return 影响行数
     * @throws java.lang.Exception
     */
    Map<String, Object> setPoOverFlag(Long headerId, Long currentUserId, Long workFlowId, Boolean poOverFlag) throws Exception;

    /**
     *
     * @param headerId 物料需求计划标识
     * @param moHeaderId 计算用生产指示书ID
     * @param productId 计算用产品ID
     * @param bomHeaderId 计算用单耗ID
     * @return
     * @throws Exception
     */
    Map<String, Object> fetchPrintDataWithMoFormat(Long headerId, Long moHeaderId, Long productId, Long bomHeaderId) throws Exception;
}
